package top.shiyiri.generic;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Aunean
 * @date 2022/1/8
 */
/*
如何自定义泛型结构：泛型类、泛型接口、泛型方法。
1.关于自定义泛型类、泛型接口：

2.
 */
public class GenericTest1 {

    @Test
    public void test1() {

        //如果定义了泛型类，实例化没有指明类的泛型，则认为此泛型类型为 Object 类型
        //要求：如果定义了类是带泛型的，建议在实例化时要指明类的泛型
        Order objectOrder = new Order();
        objectOrder.setOrderId(123);
        objectOrder.setOrderName("ABC");
        System.out.println(objectOrder);

        Order<String> order = new Order<>("ABC", 23, "oder123");
        System.out.println(order);
    }

    @Test
    public void test2() {
        SubOrder order = new SubOrder();
        //由于子类在继承带泛型的父类时，指明了父类的泛型，则实例化子类对象时，不需要再指明泛型
        order.setOrderT(123);

        SubOrder1<String> order1 = new SubOrder1<>();
        order1.setOrderT("order1");
    }

    @Test
    public void test3() {
        ArrayList<String> list1 = null;
        ArrayList<Integer> list2 = null;
        //泛型不同的引用不能相互赋值
        //list1 = list2;
    }

    @Test
    public void test4() {
        Order<String> order = new Order<>();
        Integer[] arr = new Integer[]{1, 2, 3, 4};
        //泛型方法在调用时，指明泛型参数的类型
        List<Integer> list = order.copyFromArrayToList(arr);
        System.out.println(list);
    }
}
